/**
 * 
 */
package com.hson.demo.base.controller;

import java.text.SimpleDateFormat;

import com.hson.demo.base.exception.DataAccessException;
import com.hson.demo.base.util.DataValidateUtil;



/**
 * 控制层数据校验
 * 
 * @author Hungel.zou
 * @time 2015年6月26日 下午1:16:48
 */
public abstract class DataAccessController extends BaseController {

	/**
	 * 校验字符串不能为空
	 * 
	 * @param str
	 * @param msg
	 * @throws DataAccessException
	 */
	protected void checkString(String str, String msg) throws DataAccessException {
		if (!DataValidateUtil.checkString(str)) {
			throw new DataAccessException(msg);
		}
	}

	/**
	 * 校验密码
	 * 
	 * @param pwd
	 * @param newPwd
	 * @param msg
	 * @throws AppException
	 */
	protected void checkPassword(String pwd, String newPwd, String msg)	throws DataAccessException {
		checkString(pwd, "密码不能为空");
		checkString(newPwd, "确认密码不能为空");
		if (!pwd.equals(newPwd)) {
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 校验邮箱是否有效
	 * 
	 * @param email
	 * @param msg
	 *            ：提示语
	 * @throws DataAccessException
	 */
	protected void checkEmail(String email, String msg) throws DataAccessException {
		if (!DataValidateUtil.checkString(email)) {
			throw new DataAccessException("邮箱不能为空");
		}
		if (!DataValidateUtil.checkEmail(email)) {
			throw new DataAccessException(msg);
		}
	}

	/**
	 * 校验手机号码是否有效
	 * 
	 * @param email
	 * @param msg
	 *            ：提示语
	 * @throws DataAccessException
	 */
	protected void checkMobile(String mobile, String msg) throws DataAccessException {
		if (!DataValidateUtil.checkString(mobile)) {
			throw new DataAccessException("手机号码不能为空");
		}
		if (!DataValidateUtil.checkMobileNumber(mobile)) {
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 校验整数
	 * 
	 * @param in
	 * @param msg
	 * @throws DataAccessException
	 */
	protected void checkInteger(String in, String msg) throws DataAccessException{
		if (!DataValidateUtil.checkString(in)) {
			throw new DataAccessException("输入值不能为空");
		}
		if (!DataValidateUtil.checkInt(in)) {
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 校验整数
	 * 
	 * @param in
	 * @param msg
	 * @throws DataAccessException
	 */
	protected void checkLong(String in, String msg) throws DataAccessException{
		if (!DataValidateUtil.checkString(in)) {
			throw new DataAccessException(msg);
		}
		if (!DataValidateUtil.checkLong(in)) {
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 校验月份（yyyy-mm）
	 * 
	 * @param in
	 * @param msg
	 * @throws DataAccessException
	 */
	protected void checkMDate(String in, String msg) throws DataAccessException{
		if (!DataValidateUtil.checkString(in)) {
			throw new DataAccessException(msg);
		}
		if (in.length()!=7) {
			throw new DataAccessException(msg);
		}
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
			format.setLenient(false);
			format.parse(in);
		} catch (Exception e) {
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 校验日期（yyyy-mm-dd）
	 * 
	 * @param in
	 * @param msg
	 * @throws DataAccessException
	 */
	protected void checkDDate(String in, String msg) throws DataAccessException{
		if (!DataValidateUtil.checkString(in)) {
			throw new DataAccessException(msg);
		}
		if (in.length()!=10) {
			throw new DataAccessException(msg);
		}
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			format.setLenient(false);
			format.parse(in);
		} catch (Exception e) {
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 检查字符是否超长
	 * 
	 * @param in : 被检查的字符
	 * @param valideLength ： 允许的长度
	 * @param msg ：提示信息
	 * @throws DataAccessException
	 */
	protected void checkLength(String in, int valideLength, String msg) throws DataAccessException {
		checkString(in, msg);
		int inputLenth = DataValidateUtil.length(in);
		if (inputLenth > valideLength) {
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 字符长度限制在某个范围
	 * 
	 * @param in
	 * @param minLen
	 * @param maxLen
	 * @throws DataAccessException
	 */
	protected void checkLengthScope(String in, int minLen, int maxLen) throws DataAccessException{
		checkString(in, "输入字符为空");
		int inputLenth = DataValidateUtil.length(in);
		if (inputLenth < minLen) {
			throw new DataAccessException("最小长度不少于：" + minLen + "个字符");
		}
		if (inputLenth > maxLen) {
			throw new DataAccessException("最大长度不超过：" + maxLen + "个字符");
		}
		
	}
	
	/**
	 * 检查Long型整数
	 * 
	 * @param in
	 * @param msg
	 * @throws DataAccessException
	 */
	protected void checkLong(Long in, String msg) throws DataAccessException{
		if(in == null){
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 校验是否含有非中文字符
	 * @author liangtl
	 */
	protected void checkNonChinese(String in, String msg) throws DataAccessException{
		if (DataValidateUtil.containNonChinese(in)) {
			throw new DataAccessException(msg);
		}
	}
	
	/**
	 * 检查字符是否在范围内
	 * @author zenghh
	 * 
	 * @param in : 被检查的字符
	 * @param valideLength ： 允许的长度
	 * @param msg ：提示信息
	 * @throws DataAccessException
	 */
	protected void checkLen(String in, int minLength, int maxLength, String msg) throws DataAccessException {
		checkString(in, msg);
		int inputLenth = DataValidateUtil.length(in);
		if (inputLenth > maxLength || inputLenth < minLength) {
			throw new DataAccessException(msg);
		}
	}

}
